// 语言包类型定义
export interface LocaleText {
  [key: string]: string | LocaleText;
}

export interface FlyCutCaptionLocale {
  common: {
    loading: string;
    error: string;
    success: string;
    confirm: string;
    cancel: string;
    ok: string;
    close: string;
    save: string;
    delete: string;
    edit: string;
    preview: string;
    export: string;
    import: string;
    reset: string;
    apply: string;
    search: string;
    clear: string;
    select: string;
    upload: string;
    download: string;
    retry: string;
    back: string;
    next: string;
    previous: string;
    finish: string;
    skip: string;
    enable: string;
    disable: string;
    play: string;
    pause: string;
    stop: string;
    mute: string;
    unmute: string;
    fullscreen: string;
    exitFullscreen: string;
  };
  components: {
    fileUpload: {
      dragDropText: string;
      clickToSelect: string;
      supportedFormats: string;
      maxFileSize: string;
      selectFile: string;
      invalidFileType: string;
      fileTooLarge: string;
      uploadFailed: string;
      uploadSuccess: string;
      processing: string;
      noFileSelected: string;
      fileInfo: string;
      fileName: string;
      fileSize: string;
      fileType: string;
      duration: string;
    };
    videoPlayer: {
      play: string;
      pause: string;
      stop: string;
      mute: string;
      unmute: string;
      fullscreen: string;
      exitFullscreen: string;
      volume: string;
      currentTime: string;
      duration: string;
      playbackRate: string;
      quality: string;
      subtitle: string;
      showSubtitle: string;
      hideSubtitle: string;
      previousFrame: string;
      nextFrame: string;
      skipBackward: string;
      skipForward: string;
    };
    subtitleEditor: {
      title: string;
      addSubtitle: string;
      editSubtitle: string;
      deleteSubtitle: string;
      deleteSelected: string;
      selectAll: string;
      deselectAll: string;
      mergeSubtitles: string;
      splitSubtitle: string;
      adjustTiming: string;
      startTime: string;
      endTime: string;
      text: string;
      duration: string;
      timeline: string;
      waveform: string;
      zoomIn: string;
      zoomOut: string;
      fitToScreen: string;
      showWaveform: string;
      hideWaveform: string;
      playSelection: string;
      clearSelection: string;
      undoDelete: string;
      redoDelete: string;
      searchSubtitle: string;
      replaceText: string;
      translateSubtitle: string;
      exportSRT: string;
      exportVTT: string;
      exportJSON: string;
      importSRT: string;
      importVTT: string;
      importJSON: string;
      previewSubtitle: string;
      subtitleStyle: string;
      fontSize: string;
      fontColor: string;
      backgroundColor: string;
      outline: string;
      shadow: string;
      position: string;
      alignment: string;
    };
    asrPanel: {
      title: string;
      startASR: string;
      stopASR: string;
      pauseASR: string;
      resumeASR: string;
      progress: string;
      status: string;
      modelLoading: string;
      modelLoaded: string;
      processing: string;
      completed: string;
      failed: string;
      cancelled: string;
      language: string;
      autoDetect: string;
      whisperModel: string;
      generateWordTimestamps: string;
      enableVAD: string;
      vadThreshold: string;
      maxSegmentLength: string;
      temperature: string;
      beamSize: string;
      patience: string;
      lengthPenalty: string;
      repetitionPenalty: string;
      noRepeatNgramSize: string;
      initialPrompt: string;
      suppressBlank: string;
      suppressTokens: string;
      withoutTimestamps: string;
      maxInitialTimestamp: string;
      wordTimestamps: string;
      prependPunctuations: string;
      appendPunctuations: string;
      lastTokensToIgnore: string;
      modelSettings: string;
      advancedSettings: string;
      resetSettings: string;
      saveSettings: string;
      loadSettings: string;
    };
    exportDialog: {
      title: string;
      format: string;
      quality: string;
      resolution: string;
      frameRate: string;
      bitrate: string;
      codec: string;
      container: string;
      includeAudio: string;
      audioCodec: string;
      audioBitrate: string;
      audioSampleRate: string;
      includeSubtitle: string;
      burnSubtitle: string;
      subtitleTrack: string;
      outputFile: string;
      exportVideo: string;
      exportAudio: string;
      exportSubtitle: string;
      exportAll: string;
      previewExport: string;
      exportProgress: string;
      exportSuccess: string;
      exportFailed: string;
      exportCancelled: string;
      estimatedSize: string;
      estimatedTime: string;
    };
    messageCenter: {
      title: string;
      noMessages: string;
      clearAll: string;
      markAllRead: string;
      filter: string;
      allMessages: string;
      errors: string;
      warnings: string;
      info: string;
      success: string;
      timestamp: string;
      details: string;
      dismiss: string;
      retry: string;
      report: string;
    };
    themeToggle: {
      light: string;
      dark: string;
      auto: string;
      toggleTheme: string;
    };
    languageSelector: {
      language: string;
      selectLanguage: string;
      chinese: string;
      english: string;
      japanese: string;
      korean: string;
      french: string;
      german: string;
      spanish: string;
      portuguese: string;
      russian: string;
      arabic: string;
      hindi: string;
    };
  };
  messages: {
    fileUpload: {
      selectFile: string;
      uploadInProgress: string;
      uploadSuccess: string;
      uploadFailed: string;
      invalidFileType: string;
      fileTooLarge: string;
      networkError: string;
      serverError: string;
      processingFile: string;
      extractingAudio: string;
      analyzingAudio: string;
      generatingSubtitles: string;
      processingComplete: string;
      processingFailed: string;
      processingCancelled: string;
    };
    asr: {
      modelDownloading: string;
      modelDownloaded: string;
      modelDownloadFailed: string;
      initializingModel: string;
      modelInitialized: string;
      modelInitializationFailed: string;
      asrStarted: string;
      asrProgress: string;
      asrCompleted: string;
      asrFailed: string;
      asrCancelled: string;
      noAudioDetected: string;
      audioTooShort: string;
      audioTooLong: string;
      unsupportedAudioFormat: string;
      insufficientMemory: string;
      networkTimeout: string;
    };
    export: {
      exportStarted: string;
      exportProgress: string;
      exportCompleted: string;
      exportFailed: string;
      exportCancelled: string;
      invalidParameters: string;
      insufficientSpace: string;
      encodingError: string;
      ioError: string;
      permissionDenied: string;
    };
    subtitle: {
      subtitleAdded: string;
      subtitleEdited: string;
      subtitleDeleted: string;
      subtitlesMerged: string;
      subtitleSplit: string;
      timingAdjusted: string;
      textReplaced: string;
      subtitleTranslated: string;
      invalidTimeRange: string;
      overlappingSubtitles: string;
      emptySubtitleText: string;
      maxSubtitlesReached: string;
      undoLimit: string;
      redoLimit: string;
    };
    video: {
      videoLoaded: string;
      videoLoadFailed: string;
      seekCompleted: string;
      playbackError: string;
      networkError: string;
      decodingError: string;
      unsupportedFormat: string;
      videoTooLarge: string;
      videoTooLong: string;
      audioTrackMissing: string;
      videoTrackMissing: string;
    };
    general: {
      operationSuccess: string;
      operationFailed: string;
      operationCancelled: string;
      saveSuccess: string;
      saveFailed: string;
      loadSuccess: string;
      loadFailed: string;
      deleteSuccess: string;
      deleteFailed: string;
      copySuccess: string;
      copyFailed: string;
      pasteSuccess: string;
      pasteFailed: string;
      connectionLost: string;
      connectionRestored: string;
      sessionExpired: string;
      accessDenied: string;
      rateLimitExceeded: string;
      serviceUnavailable: string;
      maintenanceMode: string;
      updateAvailable: string;
      updateRequired: string;
      compatibilityIssue: string;
      browserNotSupported: string;
      featureNotSupported: string;
      experimentalFeature: string;
    };
  };
}